import pandas as pd

from rectify.error1 import error1
from rectify.error10 import error10
from rectify.error11 import error11
from rectify.error12 import error12
from rectify.error2 import error2
from rectify.error3 import error3
from rectify.error4 import error4
from rectify.error5 import error5
from rectify.error6 import error6
from rectify.error7 import compare_medications1
from rectify.error8 import compare_medications2
from rectify.error9 import compare_medications3

df = pd.read_excel('文档/随访数据.xlsx', engine='openpyxl')

# 打印表头
print("表头列名:", df.columns.tolist())  # 将列名转化为列表并打印
# 将中文括号替换为英文括号（全角转半角）
df.columns = df.columns.str.replace(r'（', '(', regex=False)  # 替换左括号
df.columns = df.columns.str.replace(r'）', ')', regex=False)  # 替换右括号

# 打印修改后的表头
print("修改后表头列名:", df.columns.tolist())

# 创建样式DataFrame（如果需要保持列名同步，建议在修改列名后创建）
styles_df = pd.DataFrame('', index=df.index, columns=df.columns)

max_number1 = len(df)
print("总操作数:", max_number1)

# 标黄部分
if '空腹血糖(mmol/L)' not in df.columns.tolist():
    print("高血压随访-此次随访分类纠错处理中...")
    try:
        column1 = '收缩压(mmHg)'
        column2 = '舒张压(mmHg)'
        column3 = '此次随访分类'
        column4 = '身份证号'
        error1(df, styles_df, column1, column2, column3, column4)
    except Exception as e:
        print(f"读取文件时发生错误：{e}")

try:
    column1 = '体重(kg)'
    column2 = '体重控制建议(公斤)'
    column3 = '体质指数'
    error2(df, styles_df, column1, column2, column3)
except Exception as e:
    print(f"读取文件时发生错误：{e}")

if "随访日期" in df.columns.tolist():
    try:
        column1 = '身份证号'
        column2 = '随访日期'
        column3 = '收缩压(mmHg)'
        column4 = '舒张压(mmHg)'
        column5 = '心率'
        column6 = '体重(kg)'
        error3(df, styles_df, column1, column2, column3, column4, column5, column6)
    except Exception as e:
        print(f"读取文件时发生错误：{e}")

if "随访时间" in df.columns.tolist():
    try:
        column1 = '身份证号'
        column2 = '随访时间'
        column3 = '收缩压(mmHg)'
        column4 = '舒张压(mmHg)'
        column5 = '心率'
        column6 = '体重(kg)'
        error3(df, styles_df, column1, column2, column3, column4, column5, column6)
    except Exception as e:
        print(f"读取文件时发生错误：{e}")

if '空腹血糖(mmol/L)' in df.columns.tolist():
    print("糖尿病随访-此次随访分类纠错处理中...")
    try:
        column1 = '空腹血糖(mmol/L)'
        column2 = '此次随访分类'
        column3 = '收缩压(mmHg)'
        column4 = '舒张压(mmHg)'
        column5 = '身份证号'
        error4(df, styles_df, column1, column2, column3, column4, column5)
    except Exception as e:
        print(f"读取文件时发生错误：{e}")

if '足背动脉搏动' in df.columns.tolist():
    print("足背动脉搏动处理中...")
    try:
        column1 = '足背动脉搏动'
        error5(df, styles_df, column1)
    except Exception as e:
        print(f"读取文件时发生错误：{e}")

try:
    column1 = '随访医生签名'
    error5(df, styles_df, column1)
except Exception as e:
    print(f"读取文件时发生错误：{e}")

if '随访日期' in df.columns.tolist():
    try:
        print("随访日期处理中...")
        column1 = '身份证号'
        column2 = '随访日期'
        column3 = '随访建议'
        error6(df, styles_df, column1, column2, column3)
    except Exception as e:
        print(f"读取文件时发生错误：{e}")

if '吸烟量' in df.columns.tolist():
    try:
        print("高血压吸烟量等数值处理中...")
        column1 = '吸烟量'
        column2 = '建议日吸烟量(支/天)'
        column3 = '日饮酒量(两)'
        column4 = '建议日饮酒量(两/天)'
        column5 = '每周运动次数(次)'
        column6 = '每次运动时间(分钟/次)'
        column7 = '建议每周运动次数(次)'
        column8 = '建议每次运动时间(分钟/次)'
        error10(df, styles_df, column1, column2, column3, column4, column5, column6, column7, column8)
    except Exception as e:
        print(f"读取文件时发生错误：{e}")

if '主食类(克/天)' in df.columns.tolist():
    try:
        print("糖尿病日吸烟量(支)等数值处理中...")
        column1 = '日吸烟量(支)'
        column2 = '建议日吸烟量(支/天)'
        column3 = '日饮酒量(两)'
        column4 = '建议日饮酒量(两/天)'
        column5 = '每周运动次数(次)'
        column6 = '每次运动时间(分钟/次)'
        column7 = '建议每周运动次数(次)'
        column8 = '建议每次运动时间(分钟/次)'
        column9 = '主食类(克/天)'
        column10 = '建议主食类(克/天)'
        error11(df, styles_df, column1, column2, column3, column4, column5, column6, column7, column8, column9, column10)
    except Exception as e:
        print(f"读取文件时发生错误：{e}")

if '随访时间' in df.columns.tolist():
    try:
        print("随访时间处理中...")
        column1 = '身份证号'
        column2 = '随访时间'
        column3 = '随访建议'
        error6(df, styles_df, column1, column2, column3)
    except Exception as e:
        print(f"读取文件时发生错误：{e}")

try:
    column1 = '身高(cm)'
    column2 = '心率'
    error12(df, styles_df, column1, column2)
except Exception as e:
    print(f"读取文件时发生错误：{e}")

if '降压药使用情况' in df.columns.tolist():
    print("降压药使用情况处理中...")
    column1 = '降压药使用情况'
    column2 = '所有的用药记录'
    projects = df['已建专项'].tolist()  # 获取 "已建专项" 列作为项目列表
    # 调用函数
    try:
        df = compare_medications1(df, styles_df, column2, column1, projects)  # 调整列名顺序，确保按实际数据列进行处理
    except Exception as e:
        print(f"读取文件时发生错误：{e}")

if '降糖药使用情况' in df.columns.tolist():
    print("降糖药使用情况处理中...")
    column1 = '降糖药使用情况'
    column2 = '所有的用药记录'
    projects = df['已建专项'].tolist()  # 获取 "已建专项" 列作为项目列表
    # 调用函数
    try:
        df = compare_medications2(df, styles_df, column2, column1, projects)  # 调整列名顺序，确保按实际数据列进行处理
    except Exception as e:
        print(f"读取文件时发生错误：{e}")

if '胰岛素使用情况' in df.columns.tolist():
    print("胰岛素使用情况处理中...")
    column1 = '胰岛素使用情况'
    column2 = '所有的用药记录'
    projects = df['已建专项'].tolist()  # 获取 "已建专项" 列作为项目列表
    # 调用函数
    try:
        df = compare_medications3(df, styles_df, column2, column1, projects)  # 调整列名顺序，确保按实际数据列进行处理
    except Exception as e:
        print(f"读取文件时发生错误：{e}")

# 确保身份证号列存在于DataFrame中
if '身份证号' in df.columns:
    # 将身份证号列转换为字符串格式，确保保存时不会转换为科学计数法
    df['身份证号'] = df['身份证号'].apply(lambda x: f"{str(x)}" if pd.notnull(x) else x)

if '个人编号' in df.columns:
    # 将身份证号列转换为字符串格式，确保保存时不会转换为科学计数法
    df['个人编号'] = df['个人编号'].apply(lambda x: f"{str(x)}\t" if (pd.notnull(x) and x != '') else x)

# 所有函数执行完之后，保存DataFrame到Excel文件
df.style.apply(lambda _: styles_df, axis=None).to_excel('执行结果/随访数据_纠错.xlsx', index=False, engine='openpyxl')  # 保存一次Excel文件

print("随访纠错处理完成")

